package co.com.losalpes.marketplace.picontract.entities;

import co.com.losalpes.marketplace.picontract.bo.PurchaseOrderBO;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.OneToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
@NamedQueries({@javax.persistence.NamedQuery(name="consultarOrdenPorComercio", query="select o from PurchaseOrder o where o.comercio.nit = :nitComercio")})
public class PurchaseOrder implements Serializable
{
  private static final long serialVersionUID = 1L;

  @Id
  @GeneratedValue(strategy=GenerationType.AUTO)
  private Long id;

  @Column
  private String numSeguimiento;

  @Temporal(TemporalType.DATE)
  protected Date entrega;

  @Column
  protected String estado;

  @OneToOne
  protected Comercio comercio;

  @OneToOne
  protected ItemPO item;

  public PurchaseOrder()
  {
  }

  public PurchaseOrder(Long id, Date aEntrega, String aEstado)
  {
    this.id = id;
    this.entrega = aEntrega;
    this.estado = aEstado;
    this.comercio = new Comercio();
    this.item = new ItemPO();
  }

  public PurchaseOrder(Long id, Date aEntrega, String aEstado, Comercio aComercio, ItemPO aItem, String numSeguimiento)
  {
    this.id = id;
    this.entrega = aEntrega;
    this.estado = aEstado;
    this.comercio = aComercio;
    this.item = aItem;
    this.numSeguimiento = numSeguimiento;
  }

  public PurchaseOrder(PurchaseOrderBO pOBO)
  {
    setId(pOBO.getId());
    setEntrega(pOBO.getEntrega());
    setEstado(pOBO.getEstado());
    setComercio(new Comercio(pOBO.getComercio()));
    setItem(new ItemPO(pOBO.getItem()));
    setNumSeguimiento(pOBO.getNumSeguimiento());
  }

  public PurchaseOrderBO toBO()
  {
    PurchaseOrderBO pOBO = new PurchaseOrderBO();
    pOBO.setId(getId());
    pOBO.setEntrega(getEntrega());
    pOBO.setEstado(getEstado());
    pOBO.setNumSeguimiento(getNumSeguimiento());

    Comercio aComercio = getComercio();
    if (aComercio != null) {
      pOBO.setComercio(aComercio.toBO());
    }
    pOBO.setItem(this.item.toBO());
    return pOBO;
  }

  public Long getId() {
    return this.id;
  }

  public void setId(Long id) {
    this.id = id;
  }

  public String getNumSeguimiento() {
    return this.numSeguimiento;
  }

  public void setNumSeguimiento(String numSeguimiento) {
    this.numSeguimiento = numSeguimiento;
  }

  public Date getEntrega()
  {
    return this.entrega;
  }

  public void setEntrega(Date aEntrega)
  {
    this.entrega = aEntrega;
  }

  public String getEstado()
  {
    return this.estado;
  }

  public void setEstado(String aEstado)
  {
    this.estado = aEstado;
  }

  public Comercio getComercio()
  {
    return this.comercio;
  }

  public void setComercio(Comercio aComercio)
  {
    this.comercio = aComercio;
  }

  public ItemPO getItem()
  {
    return this.item;
  }

  public void setItem(ItemPO aItem)
  {
    this.item = aItem;
  }

  @Override
  public int hashCode()
  {
    int hash = 0;
    hash += (this.id != null ? this.id.hashCode() : 0);
    return hash;
  }

  @Override
  public boolean equals(Object object)
  {
    if (!(object instanceof PurchaseOrder)) {
      return false;
    }
    PurchaseOrder other = (PurchaseOrder)object;
    if (((this.id == null) && (other.id != null)) || ((this.id != null) && (!this.id.equals(other.id)))) {
      return false;
    }
    return true;
  }

  @Override
  public String toString()
  {
    return "co.com.losalpes.marketplace.transact.entities.PurchaseOrder[id=" + this.id + "]";
  }
}